# Maintainer: David Grayson <davidegrayson@gmail.com>

_realname=avrdude
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=6.3
pkgrel=2
pkgdesc='Software for programming Atmel AVR Microcontrollers (mingw-w64)'
arch=('any')
url="https://www.nongnu.org/avrdude/"
license=('GPL')
makedepends=("${MINGW_PACKAGE_PREFIX}-gcc"
             "grep"
             "bison"
             "flex")
depends=("${MINGW_PACKAGE_PREFIX}-libftdi"
         "${MINGW_PACKAGE_PREFIX}-libusb"
         "${MINGW_PACKAGE_PREFIX}-libusb-compat"
         "${MINGW_PACKAGE_PREFIX}-libelf")
options=('staticlibs' 'strip')
source=(#https://download.savannah.gnu.org/releases/avrdude/avrdude-${pkgver}.tar.gz{,.sig}
        https://ftp.yzu.edu.tw/nongnu/avrdude/avrdude-${pkgver}.tar.gz{,.sig}
        '01-libtool.patch'
        '02-ddk-headers.patch'
        '03-handle-printing.patch'
        '04-no-giveio.patch')

validpgpkeys=('EF497ABE47ED91B3FC3D7EA54D902FF7723BDEE9'
              '5E84F980C3CAFD4BB5841070F48CA81B69A85873')
sha256sums=('0f9f731b6394ca7795b88359689a7fa1fba818c6e1d962513eb28da670e0a196'
            'SKIP'
            '3a5c041f97e8fcd6706b08ae24fe21337fd1df13319479e2d49c3f82529ba054'
            '7b52523834e492281347bc92a064ca924dc5d09e2d653e7076c5a966d03f7768'
            '159fb7d3253931c00a019c43f343f533d4e67c3a9859b7bcdb51878b8dc26451'
            'c52f01656cfece50da9513170549fa5f0c8240544e10e77f67eea7a3ad8d1b50')

prepare()
{
  cd "${srcdir}/${_realname}-${pkgver}"

  # Delete binaries.
  rm windows/giveio.sys

  # Let's use mingw-w64's hidsdi.h instead of AVRDUDE's.
  rm my_ddk_hidsdi.h

  # Fixes a warning from libtool.  However, a DLL still does not generated.
  patch -p1 -i ../01-libtool.patch

  # Look for headers like hidsdi.h and hidpi.h at the top level,
  # (do not assume they are inside the "ddk" directory).
  patch -p1 -i ../02-ddk-headers.patch

  # Proper printing of 64-bit HANDLE pointers.  The upstream code results
  # in a compiler warning on x86_64 and wouldn't print the whole pointer.
  patch -p1 -i ../03-handle-printing.patch

  # Don't install giveio.sys or the batch scripts associated with it since it is
  # a precompiled binary and unlikely to work on modern versions of Windows
  # anyway due to driver signing requirements.
  patch -p1 -i ../04-no-giveio.patch

  ./bootstrap
}

build() {
  rm -rf "${srcdir}/build-${MINGW_CHOST}"
  mkdir -p "${srcdir}/build-${MINGW_CHOST}"
  cd "${srcdir}/build-${MINGW_CHOST}"
  CFLAGS+=" -I${MINGW_PREFIX}/include/libusb-compat"
  "../${_realname}-${pkgver}/configure" \
    --prefix="${MINGW_PREFIX}" \
    --build="${MINGW_CHOST}" \
    --host="${MINGW_CHOST}"

  make
}

check() {
  cd "${srcdir}/build-${MINGW_CHOST}"
  make check
}

package() {
  cd "${srcdir}/build-${MINGW_CHOST}"
  make DESTDIR="${pkgdir}" install

  cd "${pkgdir}${MINGW_PREFIX}"

  # Remove loaddrv.exe because we aren't distributing any drivers one could use
  # with it and driver signing requirements in modern versions of Windows mean
  # it is unlikely to work (it only claims to support Windows NT/2000/XP).
  # Also, with a generic name like loaddrv, it could cause a name collision.
  rm bin/loaddrv.exe

  # As we can see from confwin.c, AVRDUDE searches for avrdude.conf
  # using the PATH; it does not find it in /etc.
  mv etc/avrdude.conf bin

  cd "${srcdir}/${_realname}-${pkgver}"
  install -D COPYING "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/COPYING"
}
